#!/usr/bin/env python3
"""
数据库初始化脚本 - 插入示例数据
"""

from backed.app import app, db, User, Course, Category, Lesson, Enrollment, Review
from datetime import datetime

def init_sample_data():
    """初始化示例数据"""
    with app.app_context():
        print("开始初始化数据库...")
        
        # 创建所有表
        db.create_all()
        print("✅ 数据库表创建完成")
        
        # 清空现有数据（可选）
        db.session.query(Review).delete()
        db.session.query(Enrollment).delete()
        db.session.query(Lesson).delete()
        db.session.query(Course).delete()
        db.session.query(Category).delete()
        db.session.query(User).delete()
        db.session.commit()
        print("🧹 清空现有数据")
        
        # 1. 创建分类
        categories = [
            Category(name='编程开发', description='编程语言和开发技术', icon='💻', sort_order=1),
            Category(name='设计创意', description='平面设计、UI/UX设计', icon='🎨', sort_order=2),
            Category(name='数据科学', description='数据分析、机器学习', icon='📊', sort_order=3),
            Category(name='产品运营', description='产品管理、市场营销', icon='📈', sort_order=4),
            Category(name='职业技能', description='办公软件、职场技能', icon='💼', sort_order=5),
        ]
        
        for category in categories:
            db.session.add(category)
        
        db.session.commit()
        print("✅ 分类数据创建完成")
        
        # 2. 创建用户
        users = [
            User(username='admin', email='admin@liuyun.com', role='admin', phone='13800138000'),
            User(username='张老师', email='zhang@liuyun.com', role='teacher', phone='13800138001'),
            User(username='李老师', email='li@liuyun.com', role='teacher', phone='13800138002'),
            User(username='王老师', email='wang@liuyun.com', role='teacher', phone='13800138003'),
            User(username='学生小明', email='xiaoming@student.com', role='student', phone='13800138004'),
            User(username='学生小红', email='xiaohong@student.com', role='student', phone='13800138005'),
            User(username='学生小刚', email='xiaogang@student.com', role='student', phone='13800138006'),
        ]
        
        for user in users:
            db.session.add(user)
        
        db.session.commit()
        print("✅ 用户数据创建完成")
        
        # 3. 创建课程
        courses = [
            Course(
                title='Python 零基础入门',
                description='从零开始学习 Python 编程语言，适合完全没有编程基础的同学',
                category_id=1,  # 编程开发
                teacher_id=2,   # 张老师
                duration=1800,  # 30小时
                price=199.99,
                original_price=299.99,
                difficulty='beginner',
                status='published',
                max_students=100
            ),
            Course(
                title='Web前端开发实战',
                description='学习HTML、CSS、JavaScript，掌握现代前端开发技能',
                category_id=1,
                teacher_id=2,
                duration=2400,  # 40小时
                price=299.99,
                original_price=399.99,
                difficulty='intermediate',
                status='published',
                max_students=80
            ),
            Course(
                title='UI/UX 设计基础',
                description='学习用户界面和用户体验设计的基本原理和实践技巧',
                category_id=2,  # 设计创意
                teacher_id=3,   # 李老师
                duration=1500,  # 25小时
                price=249.99,
                original_price=349.99,
                difficulty='beginner',
                status='published',
                max_students=60
            ),
            Course(
                title='数据分析与可视化',
                description='使用Python进行数据分析，学会用图表讲故事',
                category_id=3,  # 数据科学
                teacher_id=4,   # 王老师
                duration=2100,  # 35小时
                price=399.99,
                original_price=499.99,
                difficulty='intermediate',
                status='published',
                max_students=50
            ),
            Course(
                title='产品经理入门指南',
                description='从0到1学习产品管理，掌握产品设计和运营技能',
                category_id=4,  # 产品运营
                teacher_id=3,
                duration=1200,  # 20小时
                price=179.99,
                original_price=249.99,
                difficulty='beginner',
                status='published',
                max_students=120
            ),
        ]
        
        for course in courses:
            db.session.add(course)
        
        db.session.commit()
        print("✅ 课程数据创建完成")
        
        # 4. 创建课时
        lessons_data = [
            # Python 零基础入门的课时
            {'course_id': 1, 'title': '第1课：Python简介和环境搭建', 'duration': 1800, 'sort_order': 1, 'is_free': True},
            {'course_id': 1, 'title': '第2课：变量和数据类型', 'duration': 2100, 'sort_order': 2, 'is_free': True},
            {'course_id': 1, 'title': '第3课：条件语句和循环', 'duration': 2400, 'sort_order': 3, 'is_free': False},
            {'course_id': 1, 'title': '第4课：函数和模块', 'duration': 2700, 'sort_order': 4, 'is_free': False},
            {'course_id': 1, 'title': '第5课：面向对象编程', 'duration': 3000, 'sort_order': 5, 'is_free': False},
            
            # Web前端开发实战的课时
            {'course_id': 2, 'title': '第1课：HTML基础', 'duration': 2400, 'sort_order': 1, 'is_free': True},
            {'course_id': 2, 'title': '第2课：CSS样式设计', 'duration': 2700, 'sort_order': 2, 'is_free': False},
            {'course_id': 2, 'title': '第3课：JavaScript入门', 'duration': 3000, 'sort_order': 3, 'is_free': False},
            {'course_id': 2, 'title': '第4课：响应式设计', 'duration': 2400, 'sort_order': 4, 'is_free': False},
            
            # UI/UX 设计基础的课时
            {'course_id': 3, 'title': '第1课：设计思维导论', 'duration': 1800, 'sort_order': 1, 'is_free': True},
            {'course_id': 3, 'title': '第2课：用户研究方法', 'duration': 2100, 'sort_order': 2, 'is_free': False},
            {'course_id': 3, 'title': '第3课：原型设计工具', 'duration': 2400, 'sort_order': 3, 'is_free': False},
        ]
        
        for lesson_data in lessons_data:
            lesson = Lesson(**lesson_data)
            db.session.add(lesson)
        
        db.session.commit()
        print("✅ 课时数据创建完成")
        
        # 5. 创建报名记录
        enrollments = [
            Enrollment(user_id=5, course_id=1, price_paid=199.99, progress=45.5),  # 小明报名Python课程
            Enrollment(user_id=5, course_id=3, price_paid=249.99, progress=20.0),  # 小明报名UI设计课程
            Enrollment(user_id=6, course_id=1, price_paid=199.99, progress=80.2),  # 小红报名Python课程
            Enrollment(user_id=6, course_id=2, price_paid=299.99, progress=15.5),  # 小红报名前端课程
            Enrollment(user_id=7, course_id=4, price_paid=399.99, progress=60.0),  # 小刚报名数据分析课程
            Enrollment(user_id=7, course_id=5, price_paid=179.99, progress=90.5),  # 小刚报名产品经理课程
        ]
        
        for enrollment in enrollments:
            db.session.add(enrollment)
        
        db.session.commit()
        print("✅ 报名数据创建完成")
        
        # 6. 创建评价
        reviews = [
            Review(user_id=5, course_id=1, rating=5, comment='张老师讲得很好，从零基础到能写简单程序，非常满意！'),
            Review(user_id=6, course_id=1, rating=4, comment='课程内容很实用，就是节奏稍微快了一点'),
            Review(user_id=5, course_id=3, rating=5, comment='李老师的设计课很棒，学到了很多实用的设计技巧'),
            Review(user_id=7, course_id=5, rating=4, comment='产品思维讲得很清楚，对工作很有帮助'),
        ]
        
        for review in reviews:
            db.session.add(review)
        
        # 更新课程评分
        for course in Course.query.all():
            reviews = Review.query.filter_by(course_id=course.id, status='published').all()
            if reviews:
                total_rating = sum([r.rating for r in reviews])
                course.rating = round(total_rating / len(reviews), 1)
                course.rating_count = len(reviews)
        
        db.session.commit()
        print("✅ 评价数据创建完成")
        
        print("\n🎉 示例数据初始化完成！")
        print("=" * 50)
        print("创建的数据概览：")
        print(f"📚 分类: {Category.query.count()} 个")
        print(f"👥 用户: {User.query.count()} 个")
        print(f"📖 课程: {Course.query.count()} 个")
        print(f"📝 课时: {Lesson.query.count()} 个")
        print(f"📋 报名: {Enrollment.query.count()} 个")
        print(f"⭐ 评价: {Review.query.count()} 个")
        print("=" * 50)
        print("可以使用以下测试账号：")
        print("管理员: admin@liuyun.com")
        print("老师: zhang@liuyun.com")
        print("学生: xiaoming@student.com")

if __name__ == "__main__":
    init_sample_data() 